#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>


//验证缓冲区提供者
int main()
{
    //使用C语言提供的接口
    printf("hello printf\n");
    fprintf(stdout,"hello fprintf\n");
    const char* s="hello fputs\n";
    fputs(s,stdout);

    //使用系统提供的接口
    const char* s2="hello write\n";
    write(1,s2,strlen(s2));

    //fork();//创建子进程
    return 0;
}




////演示dup2的使用：
////需要：myfile XXXX ,在命令行运行./myfile.o程序，能够把后面的内容打印到文件中
//int main(int argc, char* argv[])
//{
//    if(argc != 2)
//    {
//        printf("argc error!\n");
//        return 1;
//    }
//
//    int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//    if(fd < 0)
//    {
//        perror("open");
//        return 2;
//    }
//   
//    dup2(fd,1);//关闭fd=1,即stdout，并将当前打开文件的fd内容复制给fd=1
//    fprintf(stdout,"%s\n",argv[1]);
//    
//    close(fd);
//
//    return 0;
//}    




////演示输入重定向
//int main()
//{
//    close(0);
//    int fd=open("log.txt",O_RDONLY);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//
//    printf("fd:%d\n",fd);
//
//    char buffer[360];
//    fgets(buffer,sizeof buffer,stdin);
//    printf("%s\n",buffer);
//    
//    return 0;
//}


////演示追加重定向
//int main()
//{
//    close(1);//关闭stdout
//    int fd= open("log.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//
//    printf("fd:%d\n",fd);
//    
//    printf("hello stdout!\n");
//    fprintf(stdout,"hello stdout.\n");
//    const char* str="hello stdout~\n";
//    fwrite(str,strlen(str),1,stdout);
//    printf("-------------------\n");
//
//    fflush(stdout);
//    close(fd);
//    return 0;
//}






////演示输出重定向
//int main()
//{
//    close(1);//关闭stdout
//    int fd= open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//
//    printf("fd:%d\n",fd);
//    printf("fd:%d\n",fd);
//    printf("fd:%d\n",fd);
//    printf("fd:%d\n",fd);
//    
//    printf("hello stdout!\n");
//    fprintf(stdout,"hello stdout.\n");
//    const char* str="hello stdout~\n";
//    fwrite(str,strlen(str),1,stdout);
//
//    fflush(stdout);
//    close(fd);
//    return 0;
//}




////验证文件描述符分配规则
//int main()
//{
//    //close(0);//关闭stdin
//    close(2);//关闭stderr
//    int fd= open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//
//    printf("fd:%d\n",fd);
//    printf("fd:%d\n",fd);
//    printf("fd:%d\n",fd);
//    printf("fd:%d\n",fd);
//    
//    close(fd);
//    return 0;
//}
